package com.hcms.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hcms.admin.dto.SysAdminInfoResponse;
import com.hcms.mybatis.entity.SysAdmin;
import com.hcms.mybatis.entity.SysRole;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 后台用户表 服务类
 * </p>
 *
 * @author achenxw@126.com
 * @since 2023-02-13
 */
public interface ISysAdminService extends IService<SysAdmin> {

    /**
     * 获取用户登录信息
     *
     * @return
     */
    SysAdminInfoResponse getInfo(String username);

    /**
     * 注册功能
     */
    SysAdmin register(SysAdmin sysAdmin);

    /**
     * 刷新token的功能
     *
     * @param oldToken 旧的token
     */
    String refreshToken(String oldToken);

    /**
     * 根据用户名或昵称分页查询用户
     *
     * @return
     */
    List<SysAdmin> getList(String keyword, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 根据用户id获取用户
     *
     * @return
     */
    SysAdmin getView(Long id);

    /**
     * 添加用户
     *
     * @param entity
     * @return
     */
    int createItem(SysAdmin entity);

    /**
     * 修改指定用户信息
     */
    int updateItem(Long id, SysAdmin entity);

    /**
     * 删除指定用户
     */
    int deleteItem(String ids);

    /**
     * 根据用户名获取后台管理员
     */
    SysAdmin getAdminByUsername(String username, Boolean mustFromDB);

    /**
     * 获取用户权限列表
     *
     * @param adminId
     * @param mustFromDB
     * @return
     */
    Collection<String> getPermissionsByAdminId(Long adminId, Boolean mustFromDB);

    /**
     * 获取缓存服务
     */
    ISysAdminCacheService getCacheService();


    /**
     * 获取用户角色
     *
     * @param adminId
     * @return
     */
    Collection<SysRole> getAdminRoles(Long adminId);

    /**
     * 设置用户角色
     *
     * @param adminId
     * @param roles
     * @return
     */
    @Transactional
    boolean setAdminRoles(Long adminId, String roles);


    /**
     * 检验当前用户是否有权限
     *
     * @param perms
     * @return
     */
    boolean checkPermissions(String[] perms);

    /**
     * 修改用户密码
     *
     * @param adminId
     * @param password
     * @param newPassword
     * @return
     */
    boolean changePassword(Long adminId, String password, String newPassword);
}
